﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using ITProject.Domain.Entities;

namespace ITProject.WebUI.Models.ProjectAdmin
{
    public class ProjectAdminEditFeatureViewModel
    {
        [Display(Name = "Nazwa")]
        [Required(ErrorMessage = "Nazwa funkcjonalności jest wymagana")]
        [MinLength(4, ErrorMessage = "Nazwa funkcjonalności musi posiadać conajmniej 4 znaki")]
        [MaxLength(50, ErrorMessage = "Nazwa funkcjonalności nie może posiadać więcej niż 50 znaków")]
        public string Name { get; set; }
        [Display(Name = "Opis")]
        public string Description { get; set; }
        [Display(Name = "Planowana data ukończenia funkcjonalności")]
        [Required(ErrorMessage = "Podanie planowanej daty ukończenia jest wymagane")]
        public DateTime PlannedEndDate { get; set; }
        [Display(Name = "Priorytet")]
        [Required(ErrorMessage = "Musisz wybrać priorytet funkcjonalności")]
        public string ReturnPriority { get; set; }
        [Display(Name = "Zleć uczestnikowi")]
        public bool IsToUser { get; set; }
        [Display(Name = "Uczestnik odpowiedzialny z funkcjonalność")]
        public string ReturnUser { get; set; }
        [Display(Name = "Zespół odpowiedzialny z funkcjonalność")]
        public string ReturnTeam { get; set; }
        [Display(Name = "Przypisanie do wersji")]
        public string ReturnVersion { get; set; }

        //ustawiane przez kontroler i ukryte
        public string ProjectName { get; set; }
        public int FeatureId { get; set; }

        public PriorityViewModel PriorityList { get; set; }
        public List<SelectListItem> ReleaseList;
        public List<SelectListItem> TeamList;
        public List<SelectListItem> UserList;

        public static ProjectAdminEditFeatureViewModel Convert(Feature feature,string projectName)
        {
            ProjectAdminEditFeatureViewModel vm = new ProjectAdminEditFeatureViewModel();
            vm.Name = feature.Name;
            vm.PlannedEndDate = feature.PlannedEndDate;
            vm.IsToUser = !feature.IsToTeam;
            vm.ProjectName = projectName;
            vm.Description = feature.Description;
            vm.FeatureId = feature.Id;
            vm.PriorityList=new PriorityViewModel(PriorityViewModel.ConvertFromString(PriorityViewModel.ConvertFromByte(feature.Priority)));
            return vm;
        }

        public static Feature Convert(ProjectAdminEditFeatureViewModel vm, int? releaseId)
        {
            Feature feature = new Feature();
            feature.Id = vm.FeatureId;
            feature.IsToTeam = !vm.IsToUser;
            feature.Name = vm.Name;
            feature.PlannedEndDate = vm.PlannedEndDate;
            feature.Priority = (byte)PriorityViewModel.ConvertFromString(vm.ReturnPriority);
            feature.Description = vm.Description;
            feature.ReleaseId = releaseId;
            // projectId, startDate i status zostaja bez zmian
            return feature;
        }
    }
}